home *** CD-ROM | disk | FTP | other *** search
- /*
- * $XConsortium: Xlocaleint.h,v 1.35 92/04/14 15:55:37 rws Exp $
- */
-
- /*
- * Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation,
- * and Nippon Telegraph and Telephone Corporation
- * Copyright 1991 by the Massachusetts Institute of Technology
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the names of OMRON, NTT Software, NTT, and M.I.T.
- * not be used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission. OMRON, NTT Software,
- * NTT, and M.I.T. make no representations about the suitability of this
- * software for any purpose. It is provided "as is" without express or
- * implied warranty.
- *
- * OMRON, NTT SOFTWARE, NTT, AND M.I.T. DISCLAIM ALL WARRANTIES WITH REGARD
- * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS, IN NO EVENT SHALL OMRON, NTT SOFTWARE, NTT, OR M.I.T. BE
- * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Authors: Li Yuhong OMRON Corporation
- * Tatsuya Kato NTT Software Corporation
- * Hiroashi Kuribayashi OMRON Corporation
- *
- */
-
- /*
- * Xlocaleint.h -- Header definition.
- *
- */
- #ifndef _XLOCALEINT_H_
- #define _XLOCALEINT_H_
-
- #define _WCHARXLIB_
- #include "wcharint.h"
- #undef _WCHARXLIB_
-
- #include <X11/Xlocale.h>
- #include "Xlcint.h"
-
- #define MAXCHARSETS 16
- #define MAXSEQUENCELENGTH 255
-
- #define XDEFAULT_STATE 0xffffff /* to specify default _State for XConvertXXToXX */
- /*
- * Charset id of codeset. Maximun is 10 charsets of one codeset.
- * Must Define: CODESETi = i, other functions will use this convension.
- *
- */
- typedef unsigned int _State;
- typedef unsigned char _CSID;
-
- #define CODESET0 0 /* Charset 0 */
- #define CODESET1 1 /* Charset 1 */
- #define CODESET2 2 /* Charset 2 */
- #define CODESET3 3 /* Charset 3 */
- #define CODESET4 4 /* Charset 4 */
- #define CODESET5 5 /* Charset 5 */
- #define CODESET6 6 /* Charset 6 */
- #define CODESET7 7 /* Charset 7 */
- #define CODESET8 8 /* Charset 8 */
- #define CODESET9 9 /* Charset 9 */
- #define CODESETA 10 /* Charset A */
- #define CODESETB 11 /* Charset B */
- #define CODESETC 12 /* Charset C */
- #define CODESETD 13 /* Charset D */
- #define CODESETE 14 /* Charset E */
- #define CODESETF 15 /* Charset F */
- #define C0 16 /* Control Set 0 */
- #define C1 17 /* Control Set 1 */
- #define ND 127 /* Not Defined */
-
- /* ISO encoding */
- #define GL 0
- #define GR 0x80
- #define C94 0
- #define C96 1
-
- /*
- * Type of codeset
- */
- #define CDS_STATELESS 1 /* state-independent codeset */
- #define CDS_STATEFUL 2 /* state-dependent codeset */
- #define CDS_SELFDEFINED 10 /* self defined codeset, not used yet.*/
-
-
- /*
- * Data Structure for Convert Map List
- */
- typedef struct {
- unsigned int mb_start; /* starting code point of multibyte*/
- unsigned int mb_end; /* ending code point of multibyte */
- unsigned int cs_start; /* starting code point of charset */
- unsigned int cs_end; /* ending code point of charset */
- } Range;
-
- /*
- * Data Structure for Codeset
- */
- typedef struct { /* Stateless Codeset */
- int cds_type; /* stateless type */
- _CSID cds_num; /* number of charsets */
- _State mb_init; /* inital designate */
- int cds_msbon; /* 8bit encoding or not */
- int cds_mb_cur_max; /* max number of bytes of this codeset */
- /* = max(cds_mblen) + max(cds_dsg) */
- int cds_mblen[MAXCHARSETS]; /* mb length of each charsets */
- unsigned short cs_offset[MAXCHARSETS]; /* GL or GR */
- Range *cds_cnvlist; /* table-driven conversion list */
- int cds_cnvindex[MAXCHARSETS];/* conversion list index */
- int (*cds_cnvproc)(); /* procedure-driven conversion, not used */
- union {
- _CSID map[256]; /* charset mapping table,stateless CCS*/
- char *dsg[MAXCHARSETS]; /* designation of charaset,stateful CCS*/
- } cds;
- #define cds_map cds.map
- #define cds_dsg cds.dsg
- } Codeset;
-
- /*
- * The number of charasets is different from the number of fonts in
- * some codeset, e.g., the current UJIS, no extended font for CODESET3.
- */
- typedef struct {
- char *cs_name; /* charset name: CharSetReg-CharSetEncoding */
- wchar cs_woff; /* wchar offset of DP 10646 */
- int cs_len; /* length in bytes */
- char *cs_des; /* designate sequence of COMPOUND TEXT */
- _CSID cs_GLorGR;
- _CSID cs_id; /* index of ISOStateTable(_XInitCTEncoding) */
- } Charset;
-
- typedef struct {
- int fs_num; /* number of fonts of locale */
- Charset **fs_cset; /* charset encoding */
- } Fontset;
-
- typedef struct _XLocaleDB {
- char *lc_name; /* locale name for LC_ALL */
- char *lc_encoding; /* encoding name */
- Codeset *lc_codeset; /* category of codeset */
- Fontset *lc_fontset; /* category of fontset */
- struct _XLocaleDB *next; /* chain pointer */
- } XLocaleDB;
-
- /* the definition for initial state of locale is:
-
- initial state of state-independent codeset:
- byte 2 byte 1 byte 0
- +-------------+--------------+--------------+
- | GL/GR flag | CODESET0 | CODESET0 |
- +-------------+--------------+--------------+
-
- initial state of state-dependent codeset:
- byte 2 byte 1 byte 0
- +-------------+--------------+--------------+
- | GL/GR flag | GR CODESETj | GL CODESETi |
- +-------------+--------------+--------------+
-
- where:
- GL CODESETi is the first GL encoding of codeset, usually is
- CODESET0.
- GR CODESETj is the first GR encoding of codeset.
- */
-
- typedef struct {
- XLocaleDB *xlc_db;
- char *lc_lang; /* locale name */
- _State ct_state;
- _State mb_state;
- } XLocaleRec, *XLocale;
-
- typedef struct {
- XLCdMethods methods; /* methods of this LC */
- XLCdCoreRec core; /* core data of this LC */
- XLocale xlc;
- } XsiLCdRec, *XsiLCd;
-
- /*
- * Data Structure for Charset.
- * This charset is designated by escape sequence that is defined in ISO 2022.
- */
- typedef struct {
- int code_bytes; /* number of bytes of 94/96 charset*/
- unsigned char code_min, /* minimun of all bytes of GL/GR charset */
- code_max; /* maximun of all bytes of GL/GR charset */
- } ISOStateInfo;
-
- /*
- * Must define:
- * Success = 0
- * BadName < 0
- * Some functions will use this convension, e.g., _XwcDecomposeGlyphCharset().
- */
- #define BufferOverFlow (-1)
- #define BadBuffer (-1)
- #define BadTerminate (-2)
- #define BadEncoding (-3)
-
- #define _XctDefaultState() (_State)(CODESET0 | CODESET1 << 8 | GL << 16)
- #define _XmbDefaultState(xlocale) ((xlocale)->xlc_db->lc_codeset->mb_init)
-
- #define _Xmbtype(xlocale) ((xlocale)->xlc_db->lc_codeset->cds_type)
-
- #define _Xmbcsnum(xlocale) ((xlocale)->xlc_db->lc_codeset->cds_num)
- #define _Xmbfsnum(xlocale) ((xlocale)->xlc_db->lc_fontset->fs_num)
-
-
- #define ctGetGLid(xlocale) (_CSID)((xlocale)->ct_state & 0xff)
- #define ctGetGRid(xlocale) (_CSID)((xlocale)->ct_state >> 8 & 0xff)
- #define ctGetGLorGR(xlocale) (_CSID)((xlocale)->ct_state >> 16 & 0xff)
- #define ctGetid(xlocale) (_CSID)((ctGetGLorGR(xlocale) == GL) ? \
- ctGetGLid(xlocale) : ctGetGRid(xlocale))
- #define ctSetGLid(xlocale, id) ((xlocale)->ct_state = (xlocale)->ct_state & 0xffff00 | (id))
- #define ctSetGRid(xlocale, id) ((xlocale)->ct_state = \
- (xlocale)->ct_state & 0xff00ff | (_State)(id) << 8)
- #define ctSetGLorGR(xlocale, id) ((xlocale)->ct_state = \
- (xlocale)->ct_state & 0x00ffff | (_State)(id) << 16)
- #define ctSetid(xlocale, id) ((xlocale)->ct_state = \
- (ctGetGLorGR(xlocale) == GL) ? \
- ctSetGLid(xlocale, id) : ctSetGRid(xlocale, id))
-
- #define mbGetGLid(xlocale) (_CSID)((xlocale)->mb_state & 0xff)
- #define mbGetGRid(xlocale) (_CSID)((xlocale)->mb_state >> 8 & 0xff)
- #define mbGetGLorGR(xlocale) (_CSID)((xlocale)->mb_state >> 16 & 0xff)
- #define mbGetid(xlocale) (_CSID)((mbGetGLorGR(xlocale) == GL) ? \
- mbGetGLid(xlocale) : mbGetGRid(xlocale))
- #define mbSetGLid(xlocale, id) ((xlocale)->mb_state = (xlocale)->mb_state & 0xffff00 | (id))
- #define mbSetGRid(xlocale, id) ((xlocale)->mb_state = \
- (xlocale)->mb_state & 0xff00ff | ((_State)(id) << 8))
- #define mbSetGLorGR(xlocale, id) ((xlocale)->mb_state = \
- (xlocale)->mb_state & 0x00ffff | (_State)(id) << 16)
- #define mbSetid(xlocale, id) ((xlocale)->mb_state = \
- (mbGetGLorGR(xlocale) == GL) ? \
- mbSetGLid(xlocale, id) : mbSetGRid(xlocale, id))
-
- #define _Xctinit(xlocale) ((xlocale)->ct_state = _XctDefaultState())
- #define _Xmbinit(xlocale) ((xlocale)->mb_state = _XmbDefaultState(xlocale))
-
- #define _XlcFreeLocale(xlc) Xfree((char *)(xlc))
-
- #ifdef notdef /* I am not yet convinced we need these inside Xlib */
-
- #ifndef X_NOT_STDC_ENV
- #include <limits.h>
- #endif
- #ifndef MB_LEN_MAX
- #define MB_LEN_MAX 6
- #endif
-
- #ifndef X_NOT_STDC_ENV
- #include <stdlib.h>
- #endif
- #ifndef MB_CUR_MAX
- #define MB_CUR_MAX (_XFallBackConvert()->xlc_db->lc_codeset->cds_mb_cur_max)
- #endif
-
- #endif
-
- #define _isXString(c) \
- (((c) >= 0x20 && (c) <= 0x7e) || (c) >= 0xa0 || (c) == 0x09 || (c) == 0x0a)
-
- /* XlcAccess.c */
- extern int _Xmbmsbon();
- extern _CSID _Xmbcsid();
- extern int _Xmblen();
- extern char * _Xmbdsg();
- extern int _Xmbdlen();
- extern Charset * _Xmbfscs();
- extern char * _Xmbfsname();
- extern int _Xmbfslen();
- extern char * _Xmbfsdsg();
- extern wchar _Xmbfswf();
- extern int _Xmbctocsc();
- extern int _Xcsctombc();
- extern _CSID _XmbctGLorGR();
- extern _CSID _Xmbctid();
- extern _CSID _Xmbctidtocsid();
- extern void _XmbGetDefaultEncoding();
-
- /* XInitCT.c */
- extern void _XInitCTEncoding();
-
- extern Bool _XctisGLdsg();
- extern Bool _XcwNameGetAll();
- extern _CSID _XcwNameGetGLorGRId();
- extern void _XcwGetAll();
- extern void _XcwGetDefaultEncoding();
- extern _CSID _XcwGetWoffsetFromLocale();
- extern Bool _XcwCheckDefaultState();
- extern Bool _XmbCheck();
- extern Bool _XcwIdCheck();
- extern Bool _XcwIdGetAll();
- extern Bool _XcwIdGetEncoding();
- extern int _XcwGetLength();
-
- /* XlcLoad.c */
- extern XLocale _XlcDupLocale();
- extern XLocale _XlcMakeLocale();
- extern XLocale _XFallBackConvert();
-
- extern int _XmbDecomposeGlyphCharset();
- extern int _XwcDecomposeGlyphCharset();
-
- #endif /* _XLOCALEINT_H_ */
-